

import router from "@/router";

var state = {
    // 是否关闭导航菜单
    isCollapse: false,

    // 首页路由path
    homePath: '/home',
    // 首页路由
    homeRoute: null, 

    // tabs最大数量，无限制为'-1'
    tabsMax: 10,
    // 当前tab栏中展示的页面
    tabPages: []
}

var getters = {
    
}

var mutations = {
    // 改变导航菜单状态
    TOGGLE_IS_COLLAPSE (state, data) {
        state.isCollapse = typeof data === 'boolean' ? data : !state.isCollapse;
    },

    // 设置首页路由
    SET_HOME_ROUTE (state, data) {
      state.homeRoute = data;
    },

    // 设置当前展示栏中的页面
    ADD_TAB_PAGES (state, data) {
      // 判断当前添加页面是否已存在于列表中
      var pages = state.tabPages;
      for (var i = 0; i < pages.length; i++) {
        if (pages[i].path == data.path) {
          return;
        }
      }
      // 存在限制，并且列表长度到达临界值
      if (state.tabsMax != -1 && pages.length >= state.tabsMax) {
        for (var i = 0; i < pages.length; i++) {
          // 找出第一个不是首页的页面，删除它
          if (pages[i].path != state.homePath) {
            pages.splice(i, 1);
            break;
          }
        }
      }
      // 判断首页是否存在，不存在添加首页路由
      if (state.homeRoute && data.path != state.homePath && !pages.some(item => {
        return item.path == state.homePath;
      })) {
        state.tabPages.push(state.homeRoute);
      }

      // 添加目标页面
      state.tabPages.push(data);
    },

    // 批量删除
    // arr == ‘all’删除所有
    // arr[0]，当前点击的下标
    // arr[1], 'this'删除当前，'left'删除左边，'right'删除右边，'else'删除其它
    // arr[2], 当前显示的页面，用来判断当前页面有没有被删除，删除了就显示最后一个页面
    DELETE_TAB_PAGES (state, arr) {
      // 列表
      var pages = state.tabPages;

      if (arr == 'all') {
        state.tabPages = [];
        return;
      }

      // 判断是否忽略删除请求
      if (!(arr instanceof Array) // 参数不是数组
        || !/^\d+$/.test(arr[0]) // 参数0不是正整数+0
        || (pages[arr[0]].path == state.homePath && arr[1] == 'this') // 不能删除首页
        || ['this', 'left', 'right', 'else'].indexOf(arr[1]) == -1 // 参数1的类型不认识
      ) {
        return;
      }

      var idx = arr[0], type = arr[1], path = arr[2];

      // 根据类型与下表获取删除后显示的页面列表
      var list = pages.filter((item, index) => {
        return item.path == state.homePath || //首页
          (type == 'this' && index != idx) || // 删除当前
          (type == 'left' && index >= idx) || // 删除左边
          (type == 'right' && index <= idx) || // 删除右边
          (type == 'else' && index == idx); //  删除其它
      });
      state.tabPages = list;

      // 判断当前页是否被删除了，如果删除，显示最后一页
      if (path) {
        var isIn = false;
        for (var i = 0; i < list.length; i++) {
          var item = list[i];
          if (item.path == path) {
            isIn = true;
            break;
          }
        }
        if (!isIn && list.length) {
          router.push(list[list.length - 1]);
        }
      }
    },
} 

export default {
  state,
    getters,
    mutations
}